KPI zentrierte Code Analyse
KPI zentrierte Code Analyse (KPI = Key Performance Indicator) ist eine Methode, die Softwaresysteme hinsichtlich geschäftskritischer (business-critical) Aspekte wie Team-Performance, Time-to-Market, Risiko-Management, Failure-Prediction, analysiert. Die KPI zentrierte Code Analyse, die am Hasso-Plattner-Institut entwickelt wurde, ist eine Statische Code-Analyse von Source Code zur Verbesserung der Softwarequalität. Allerdings untersucht die KPI zentrierte Code Analyse nicht nur den Source Code oder die Coding-Aktivitäten. Zusätzlich werden weitere Informationsquellen hinzugezogen, sodass eine ganzheitliche Sicht auf die Qualität und den Entwicklungsfortschritt eines Softwaresystems entsteht. Funktionsweise Die KPI zentrierte Code Analyse ist eine voll-automatisierte Methode und erlaubt damit die Teamaktivitäten und die Veränderungen an dem vollständigen Source Code eines Softwaresystems in Echtzeit zu beobachten. Auf diese Weise werden negative Trends zum Zeitpunkt ihrer Entstehung sichtbar. Dieses „Frühwarnsystem“ bietet damit einen massiven Hebel zur Reduktion von Kosten und zur Erhöhung der Entwicklungsgeschwindigkeit. Durch den Frühwarnsystem-Ansatz der KPI zentrierten Code Analyse wird jede neu eingebaute Komplexität frühzeitig entdeckt und kann auf das notwendige Minimum reduziert werden. Anstatt für den Abbau von Altlast-Komplexitäten können die Entwickler ihre Zeit für neue Funktionalität verwenden, was hilft die Team-Produktivität zu steigern. Der Faktor Mensch Bei der KPI zentrierten Code Analyse wird der „Faktor Mensch“ mit einbezogen, d.h. es wird auch analysiert von welchem Entwickler wann welcher Code eingecheckt wurde. Auf diese Weise kann analysiert werden, welcher Entwickler welche Software Qualität liefert, womit unter anderem Probleme der Mitarbeiterqualifikation, -führung und –motivation frühzeitig erkannt und Maßnahmen zur Lösung eingeleitet werden können. Berücksichtigte Analysequellen Für die Ermittlung der Key Performance Indicators (KPI‘s) - die für die Produktivität und den Erfolg von Software Entwicklungsprojekten entscheidend sind - werden zahlreiche Datenquellen rund um den Software Code ausgelesen. Dazu nutzt die KPI zentrierte Code Analyse Methoden des Data Mining und der Business Intelligence, welche sonst vor allem bei Finanz- und Kundenanalyse Anwendung finden. Dazu werden Daten aus den nachfolgend beschriebenen Quellen extrahiert und in einem Analyse Datenmodell konsolidiert. Auf diesem Datenmodell werden dann die Werte der Key Performance Indikator errechnet. Zu den Datenquellen gehören vor allem: * Versionsverwaltungssysteme. In diesen Systemen wird jeder Schritt jedes einzelnen Entwicklers protokolliert, und zwar für den gesamten Lebenszyklus des Softwaresystems. Die Daten beschreiben: „Welcher Entwickler hat was wann geändert.“ Diese Daten sind die Grundlage für die Antwort, auf die Frage „In welche Codebereiche ist welcher Aufwand bzw. Entwicklungskosten gefloßen?“. Prominente Versionsverwaltungssysteme sind Subversion, Git, Perforce, Mercurial, Synergy, ClearCase, … * Software Test systeme. Aus ihnen kann ausgelesen werden, welcher Teil des Source Codes bereits getestet wurde (Code Coverage). Mit diesen Informationen wird offensichtlich, wo die Tests Lücken haben und eventuell sogar bewusst (aufgrund der großen Testerstellungsaufwände) weggelassen wurden. * Bug Tracking Systeme. Diese Informationen helfen in Kombination mit den Informationen aus der Versionsverwaltung, Rückschlüsse über die Fehleranfälligkeit bestimmter Codebereiche zu ziehen. * Issue Tracking Systeme. Die Informationen dieser Systeme ermöglichen, in Verbindung mit den Informationen aus der Versionsverwaltung, Rückschlüsse über Entwicklungsaktivitäten bei den fachlichen Anforderungen zu bestimmten. Zusätzlich lassen sich exakte Informationen über Zeitaufwände für die Analyse nutzen. * Profiler (Programmierung). Die Daten über die Performance des Software Systems helfen zu analysieren, welche Codebereiche den Großteil der CPU-Ressourcen konsumieren. Analyse Ergebnisse Aufgrund der vielen Einflussfaktoren, die in das Analyse Datenmodell einfließen, können Optimierungen des Source Codes erkannt werden und darüber hinaus auch Handlungsbedarfe in den Bereichen Qualifikation der Mitarbeiter, Mitarbeiterführung und Entwicklungsprozess identifiziert werden: * Kenntnisse an welcher Stelle der Source Code überarbeitet werden muss, weil er zu komplex ist oder eine schlechte Laufzeit Performance hat. ** Tiefe Verschachtelungen, die die Zahl der Kontrollfluss-Pfade exponentiell ansteigen lassen. ** Große, monolithische Codeeinheiten, bei dem mehrere Aspekte miteinander vermischt werden, so dass für die Änderung eines Aspektes, Änderungen an mehreren Stellen vorgenommen werden müssen. ** Identifizierung von unnötigem Multithreading. Multithreading ist eine sehr große Fehlerquelle, das Laufzeitverhalten von Multithreading Code ist schwer nachzuvollziehen, und damit ist der Aufwand für Erweiterungen und Wartung entsprechend hoch. Deshalb gilt es unnötiges Multithreading zu vermeiden. ** Identifizierung von ungenügendem Exception Handling. Wenn zu wenige try-Catch Blöcke im Code enthalten sind oder in der Catch Funktion nichts ausgeführt wird, können die Auswirkungen im Falle von Programmfehlern gravierend sein. ** An welcher Stelle im Vergleich zum letzten Software Test Veränderungen am Source Code durchgeführt wurden, d.h. wo getestet werden muss und wo nicht. Mit diesen Informationen können die Software Tests intelligenter geplant werden, was dazu führt die neue Funktionalität intensiver getestet wird oder Ressourcen eingespart werden können. * Kenntnis wie viel Aufwand für die Entwicklung bzw. Erweiterung eines bestimmten Software Moduls aufgewendet wurde. ** Bei Erweiterung bestehender Software Module kann eine Handlungsempfehlung sein, ein code Refactoring durchzuführen. ** Bei neu entwickelter Funktionalität kann analysiert werden ob und wenn ja warum eine Soll-Ist-Analyse bei den Aufwänden vorliegt. Wurden die Ursachen für die Planabweichung ermittelt, können Maßnahmen eingeleitet werden, die die zukünftige Planungsgenauigkeit erhöhen. * Durch die Rückverfolgung von welchem Entwickler(-team) welcher Source Code erstellt wurde und die Betrachtung der erstellten Software über einen längeren Zeitraum, kann erkannt werden, ob es sich um einen Ausrutscher bei der Qualität handelt, die Mitarbeiter Qualifikation gesteigert werden sollte oder an dem Software Entwicklungsprozess Optimierungen erforderlich sind. Mit dem Analyse Datenmodell der KPI zentrierten Code Analyse erhalten IT-Projektleiter in sehr früher Phase einen vollständigen Überblick über den Status der erstellten Software, den Fähigkeiten und Engagement der Mitarbeiter sowie dem Reifegrad des Software Entwicklungsprozess. Eine Darstellungsform der Analysedaten sind sogenannte Software Maps. Literatur * * * * Weblinks * Interactive Rendering of Complex 3D-Treemaps * Multiscale Visual Comparison of Execution Traces * Interactive Software Maps for Web-Based Source Code Analysis * Extending Recommendation Systems with Software Maps * A Visual Analysis Approach to Support Perfective Software Maintenance * ViewFusion: Correlating Structure and Activity Views for Execution Traces * A Visual Analysis and Design Tool for Planning Software Reengineerings * Interactive Areal Annotations for 3D Treemaps of Large-Scale Software Systems * Visualization of Execution Traces and its Application to Software Maintenance * Understanding Complex Multithreaded Software Systems by Using Trace Visualization * Visualization of Multithreaded Behavior to Facilitate Maintenance of Complex Software Systems * Visualizing Massively Pruned Execution Traces to Facilitate Trace Exploration * Projecting Code Changes onto Execution Traces to Support Localization of Recently Introduced Bugs * SyncTrace: Visual Thread-Interplay Analysis Kategorie:Software